最近因為剛好幫朋友寫個爬蟲,在撰寫的過程中發現這是個好素材,所以就拿來用了.
所以我們就來寫個爬蟲吧
以下的會以 .Net Core 2.0 ~ 2.1 (就是還沒release的那一版) 為範例環境
先做一次概略描述
爬蟲感覺功能需求如下:
感覺好像很複雜,換一個方式來呈現我們的需求吧
所以我們就可以很快速度生成一段code 如下並附加一些解讀 (此註解寫法非正規,僅為表現效果而做):
public class Crawler // 爬蟲
{
// 依照參數網址開始運行並回傳結果
public List<HtmlNode> Start(string url)
{
// 建立Httpclient物件
var client = new HttpClient();
// 用client以非同步 GET 的方式Request指定網址取得回應並等待結果
var res = client.GetAsync(url).Result;
//將回應的Content再以非同步的方式
//讀取內容串流並等待結果
var stream = res.Content.ReadAsStreamAsync().Result;
// 建立HtmlDocument物件
var docs = new HtmlDocument();
// 讀取剛剛取出的串流
docs.Load(stream);
// 回傳HtmlDocumentNode中 所有Element名稱為"a"的Element
// 並且放入List中回傳
return docs.DocumentNode.Elements("a").ToList();
}
}
這樣的寫法所對應出來的描述,大概就像是這樣
而這樣的描述與這樣的程式碼也許看起來沒有什麼問題
那接下來就來了解一下這次的主題會如何檢驗這段程式吧